package com.jt.provider.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

/**
 * 创建服务提供者工程
 * 服务提供方的Controller对象
 */
@RequestMapping("/provider")
@RestController
public class ProviderController {
    //@Value默认读取项目配置文件中配置的内容
    //8080为没有读到server.port的值时,给定的默认值
    @Value("${server.port:8080}")
    private String server;
    //http://localhost:8081/provider/echo/http(.http配置文件中的/http(后缀名))
    @GetMapping("/echo/{msg}")
    public String doRestEcho1(@PathVariable("msg") String msg){
        //return "say hello"+msg;
        //如果不想执行字符串拼接，可以采用如下方式
        return String.format("%s say hello %s",server,msg);
    }
    //AtomicLong 类支持线程安全的自增自减操作
    private AtomicLong atomicLong = new AtomicLong(1);//初始值默认为0
    @GetMapping("/sentinel05")
    public String doSentinel05() throws InterruptedException {
        //获取自增对象的值，然后再加1
        long num = atomicLong.getAndDecrement();
        if(num%2==0){//模拟50%的慢调用比例
            Thread.sleep(200);//程序暂停执行0.2秒
            //模拟系统异常
            //throw new RuntimeException("服务调用失败....");
        }
        return "sentinel 05 test.....";
    }
}
